package com.tea.room.service.door;

import java.util.List;
import java.util.Map;

import com.tea.room.model.WeChatToken;

/**
 * 门锁接口
 * @ClassName:DoorService   
 * @Description:TODO()   
 * @date:2019年5月30日 上午11:18:06 
 * @author ShiP
 */
public interface DoorService {
    /**
     * access_token入库
     * @param wc
     */
    void insertAccessToken(WeChatToken wc);

    /**
     * 平台登录,获取token
     */
    String getAccessToken();
    
    /**
     * 删除无效token
     */
    void removeAccessToken();
    
    /**
     * 获取楼栋列表 <br>
     * param.building   楼栋名字，可以为空，不为空时精确匹配
     * @return
     */
    String getBuilding(Map<String, Object> param);
    
    /**
     * 获取楼层列表   <br>
     * param.building   楼栋名字，可以为空，不为空时精确匹配 <br>
     * param.floor      楼层名字，可以为空，不为空时精确匹配
     * @return
     */
    String getFloor(Map<String, Object> param);
    
    /**
     * 获取房间列表   <br>
     * param.building   楼栋名字，可以为空，不为空时精确匹配 <br>
     * param.floor      楼层名字，可以为空，不为空时精确匹配  <br>
     * param.room       房间名字，可以为空，不为空时精确匹配
     * @return
     */
    String getRoomList(Map<String, Object> param);
    
    
    /**
     * 获取房间id   <br>
     * param.building   楼栋名字 <br>
     * param.floor      楼层名字<br>
     * param.room       房间名字
     * @param param
     * @return
     */
    String getRoom(Map<String, Object> param);
    
    /**
     * 获取房间里面的门锁列表<br>
     * @param id 房间id
     * @return
     */
    String getDoorlock(String id);
    
    /**
     * 查询门锁电池和信号状态<br>
     * @param list 房间id集合 [873,876,878]
     * @return
     */
    String queryLockBattery(List<String> list);
    
    /**
     * 远程开锁<br>
     * param.lockId         操作id<br>
     * param.hardwareId     门锁硬件id
     * @return
     */
    String remoteUnlock(Map<String, Object> param);
    
    /**
     * 查询远程开锁操作结果<br>
     * 本接口查询门锁的操作结果（远程开锁等），务必在调用相关操作后10秒查询<br>
     * param.requestType    请求类型，1=下发在线密码，2=在线卡片，3=删除在线密码，4=删除在线卡片，5=远程开锁，6=远程锁定，7=远程解锁，8=设置常开模式，9=设置非常开模式<br>
     * param.operationId    操作id<br>
     * param.hardwareId     门锁硬件id
     * @return
     */
    String queryOperationStatus(Map<String, Object> param);
    
    /**
     * 
     * 下发在线密码<br>
     * 取消在线密码接口和下发在线密码一致，只需要将validStart和validUntil设置为相同<br>
     * param.lockId                 门锁id，通过房间id（根据楼栋房号信息查询获取）查询门锁列表获取<br>
     * param.validStart             有效开始时间，时间戳    1555549522000<br>
     * param.validUntil             有效结束时间，时间戳    1555549522020<br>
     * param.holder                 持有人，可选<br>
     * param.phoneNumber            手机号<br>
     * param.password               密码，长度4-8位，一般为6位<br>
     * param.subType                密码类型， 1=永久，2=单次，4=限时<br>
     * param.canOpenAntilock        是否可以开反锁,true：可以开,false:不能开<br>
     * param.phoneCountry           手机国际区号，国内为+86，其他国家按照相应区号填写
     * @return
     */
    String onlinePassword(Map<String, Object> param);
    
    /**
     * 
     * 查询下发在线密码结果<br>
     * 通过本接口查询门锁下发在线密码的执行状态，下发在线密码调用成功10秒后查询<br>
     * @param operationId 操作id，下发在线密码时返回<br>
     * @param hardwareId 门锁的硬件id 下发在线密码时返回
     * @return
     */
    String queryPasswordStatus(String operationId, String hardwareId);
    
}
